home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / kernel.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  16.5 KB  |  533 lines

  1. #ifndef _LINUX_KERNEL_H
  2. #define _LINUX_KERNEL_H
  3.  
  4. /*
  5.  * 'kernel.h' contains some often-used function prototypes etc
  6.  */
  7.  
  8. #ifdef __KERNEL__
  9.  
  10. #include <stdarg.h>
  11. #include <linux/linkage.h>
  12. #include <linux/stddef.h>
  13. #include <linux/types.h>
  14. #include <linux/compiler.h>
  15. #include <linux/bitops.h>
  16. #include <linux/log2.h>
  17. #include <linux/typecheck.h>
  18. #include <linux/ratelimit.h>
  19. #include <linux/dynamic_printk.h>
  20. #include <asm/byteorder.h>
  21. #include <asm/bug.h>
  22.  
  23. extern const char linux_banner[];
  24. extern const char linux_proc_banner[];
  25.  
  26. #define USHORT_MAX    ((u16)(~0U))
  27. #define SHORT_MAX    ((s16)(USHORT_MAX>>1))
  28. #define SHORT_MIN    (-SHORT_MAX - 1)
  29. #define INT_MAX        ((int)(~0U>>1))
  30. #define INT_MIN        (-INT_MAX - 1)
  31. #define UINT_MAX    (~0U)
  32. #define LONG_MAX    ((long)(~0UL>>1))
  33. #define LONG_MIN    (-LONG_MAX - 1)
  34. #define ULONG_MAX    (~0UL)
  35. #define LLONG_MAX    ((long long)(~0ULL>>1))
  36. #define LLONG_MIN    (-LLONG_MAX - 1)
  37. #define ULLONG_MAX    (~0ULL)
  38.  
  39. #define STACK_MAGIC    0xdeadbeef
  40.  
  41. #define ALIGN(x,a)        __ALIGN_MASK(x,(typeof(x))(a)-1)
  42. #define __ALIGN_MASK(x,mask)    (((x)+(mask))&~(mask))
  43. #define PTR_ALIGN(p, a)        ((typeof(p))ALIGN((unsigned long)(p), (a)))
  44. #define IS_ALIGNED(x, a)        (((x) & ((typeof(x))(a) - 1)) == 0)
  45.  
  46. #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
  47.  
  48. #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
  49. #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
  50. #define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
  51.  
  52. #define _RET_IP_        (unsigned long)__builtin_return_address(0)
  53. #define _THIS_IP_  ({ __label__ __here; __here: (unsigned long)&&__here; })
  54.  
  55. #ifdef CONFIG_LBD
  56. # include <asm/div64.h>
  57. # define sector_div(a, b) do_div(a, b)
  58. #else
  59. # define sector_div(n, b)( \
  60. { \
  61.     int _res; \
  62.     _res = (n) % (b); \
  63.     (n) /= (b); \
  64.     _res; \
  65. } \
  66. )
  67. #endif
  68.  
  69. /**
  70.  * upper_32_bits - return bits 32-63 of a number
  71.  * @n: the number we're accessing
  72.  *
  73.  * A basic shift-right of a 64- or 32-bit quantity.  Use this to suppress
  74.  * the "right shift count >= width of type" warning when that quantity is
  75.  * 32-bits.
  76.  */
  77. #define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
  78.  
  79. /**
  80.  * lower_32_bits - return bits 0-31 of a number
  81.  * @n: the number we're accessing
  82.  */
  83. #define lower_32_bits(n) ((u32)(n))
  84.  
  85. #define    KERN_EMERG    "<0>"    /* system is unusable            */
  86. #define    KERN_ALERT    "<1>"    /* action must be taken immediately    */
  87. #define    KERN_CRIT    "<2>"    /* critical conditions            */
  88. #define    KERN_ERR    "<3>"    /* error conditions            */
  89. #define    KERN_WARNING    "<4>"    /* warning conditions            */
  90. #define    KERN_NOTICE    "<5>"    /* normal but significant condition    */
  91. #define    KERN_INFO    "<6>"    /* informational            */
  92. #define    KERN_DEBUG    "<7>"    /* debug-level messages            */
  93.  
  94. /*
  95.  * Annotation for a "continued" line of log printout (only done after a
  96.  * line that had no enclosing \n). Only to be used by core/arch code
  97.  * during early bootup (a continued line is not SMP-safe otherwise).
  98.  */
  99. #define    KERN_CONT    ""
  100.  
  101. extern int console_printk[];
  102.  
  103. #define console_loglevel (console_printk[0])
  104. #define default_message_loglevel (console_printk[1])
  105. #define minimum_console_loglevel (console_printk[2])
  106. #define default_console_loglevel (console_printk[3])
  107.  
  108. struct completion;
  109. struct pt_regs;
  110. struct user;
  111.  
  112. #ifdef CONFIG_PREEMPT_VOLUNTARY
  113. extern int _cond_resched(void);
  114. # define might_resched() _cond_resched()
  115. #else
  116. # define might_resched() do { } while (0)
  117. #endif
  118.  
  119. #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
  120.   void __might_sleep(char *file, int line);
  121. /**
  122.  * might_sleep - annotation for functions that can sleep
  123.  *
  124.  * this macro will print a stack trace if it is executed in an atomic
  125.  * context (spinlock, irq-handler, ...).
  126.  *
  127.  * This is a useful debugging help to be able to catch problems early and not
  128.  * be bitten later when the calling function happens to sleep when it is not
  129.  * supposed to.
  130.  */
  131. # define might_sleep() \
  132.     do { __might_sleep(__FILE__, __LINE__); might_resched(); } while (0)
  133. #else
  134. # define might_sleep() do { might_resched(); } while (0)
  135. #endif
  136.  
  137. #define might_sleep_if(cond) do { if (cond) might_sleep(); } while (0)
  138.  
  139. #define abs(x) ({                \
  140.         int __x = (x);            \
  141.         (__x < 0) ? -__x : __x;        \
  142.     })
  143.  
  144. extern struct atomic_notifier_head panic_notifier_list;
  145. extern long (*panic_blink)(long time);
  146. NORET_TYPE void panic(const char * fmt, ...)
  147.     __attribute__ ((NORET_AND format (printf, 1, 2))) __cold;
  148. extern void oops_enter(void);
  149. extern void oops_exit(void);
  150. extern int oops_may_print(void);
  151. NORET_TYPE void do_exit(long error_code)
  152.     ATTRIB_NORET;
  153. NORET_TYPE void complete_and_exit(struct completion *, long)
  154.     ATTRIB_NORET;
  155. extern unsigned long simple_strtoul(const char *,char **,unsigned int);
  156. extern long simple_strtol(const char *,char **,unsigned int);
  157. extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
  158. extern long long simple_strtoll(const char *,char **,unsigned int);
  159. extern int strict_strtoul(const char *, unsigned int, unsigned long *);
  160. extern int strict_strtol(const char *, unsigned int, long *);
  161. extern int strict_strtoull(const char *, unsigned int, unsigned long long *);
  162. extern int strict_strtoll(const char *, unsigned int, long long *);
  163. extern int sprintf(char * buf, const char * fmt, ...)
  164.     __attribute__ ((format (printf, 2, 3)));
  165. extern int vsprintf(char *buf, const char *, va_list)
  166.     __attribute__ ((format (printf, 2, 0)));
  167. extern int snprintf(char * buf, size_t size, const char * fmt, ...)
  168.     __attribute__ ((format (printf, 3, 4)));
  169. extern int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
  170.     __attribute__ ((format (printf, 3, 0)));
  171. extern int scnprintf(char * buf, size_t size, const char * fmt, ...)
  172.     __attribute__ ((format (printf, 3, 4)));
  173. extern int vscnprintf(char *buf, size_t size, const char *fmt, va_list args)
  174.     __attribute__ ((format (printf, 3, 0)));
  175. extern char *kasprintf(gfp_t gfp, const char *fmt, ...)
  176.     __attribute__ ((format (printf, 2, 3)));
  177. extern char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
  178.  
  179. extern int sscanf(const char *, const char *, ...)
  180.     __attribute__ ((format (scanf, 2, 3)));
  181. extern int vsscanf(const char *, const char *, va_list)
  182.     __attribute__ ((format (scanf, 2, 0)));
  183.  
  184. extern int get_option(char **str, int *pint);
  185. extern char *get_options(const char *str, int nints, int *ints);
  186. extern unsigned long long memparse(const char *ptr, char **retptr);
  187.  
  188. extern int core_kernel_text(unsigned long addr);
  189. extern int __kernel_text_address(unsigned long addr);
  190. extern int kernel_text_address(unsigned long addr);
  191. struct pid;
  192. extern struct pid *session_of_pgrp(struct pid *pgrp);
  193.  
  194. /*
  195.  * FW_BUG
  196.  * Add this to a message where you are sure the firmware is buggy or behaves
  197.  * really stupid or out of spec. Be aware that the responsible BIOS developer
  198.  * should be able to fix this issue or at least get a concrete idea of the
  199.  * problem by reading your message without the need of looking at the kernel
  200.  * code.
  201.  * 
  202.  * Use it for definite and high priority BIOS bugs.
  203.  *
  204.  * FW_WARN
  205.  * Use it for not that clear (e.g. could the kernel messed up things already?)
  206.  * and medium priority BIOS bugs.
  207.  *
  208.  * FW_INFO
  209.  * Use this one if you want to tell the user or vendor about something
  210.  * suspicious, but generally harmless related to the firmware.
  211.  *
  212.  * Use it for information or very low priority BIOS bugs.
  213.  */
  214. #define FW_BUG        "[Firmware Bug]: "
  215. #define FW_WARN        "[Firmware Warn]: "
  216. #define FW_INFO        "[Firmware Info]: "
  217.  
  218. #ifdef CONFIG_PRINTK
  219. asmlinkage int vprintk(const char *fmt, va_list args)
  220.     __attribute__ ((format (printf, 1, 0)));
  221. asmlinkage int printk(const char * fmt, ...)
  222.     __attribute__ ((format (printf, 1, 2))) __cold;
  223.  
  224. extern struct ratelimit_state printk_ratelimit_state;
  225. extern int printk_ratelimit(void);
  226. extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
  227.                    unsigned int interval_msec);
  228. #else
  229. static inline int vprintk(const char *s, va_list args)
  230.     __attribute__ ((format (printf, 1, 0)));
  231. static inline int vprintk(const char *s, va_list args) { return 0; }
  232. static inline int printk(const char *s, ...)
  233.     __attribute__ ((format (printf, 1, 2)));
  234. static inline int __cold printk(const char *s, ...) { return 0; }
  235. static inline int printk_ratelimit(void) { return 0; }
  236. static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, \
  237.                       unsigned int interval_msec)    \
  238.         { return false; }
  239. #endif
  240.  
  241. extern int printk_needs_cpu(int cpu);
  242. extern void printk_tick(void);
  243.  
  244. extern void asmlinkage __attribute__((format(printf, 1, 2)))
  245.     early_printk(const char *fmt, ...);
  246.  
  247. unsigned long int_sqrt(unsigned long);
  248.  
  249. static inline void console_silent(void)
  250. {
  251.     console_loglevel = 0;
  252. }
  253.  
  254. static inline void console_verbose(void)
  255. {
  256.     if (console_loglevel)
  257.         console_loglevel = 15;
  258. }
  259.  
  260. extern void bust_spinlocks(int yes);
  261. extern void wake_up_klogd(void);
  262. extern int oops_in_progress;        /* If set, an oops, panic(), BUG() or die() is in progress */
  263. extern int panic_timeout;
  264. extern int panic_on_oops;
  265. extern int panic_on_unrecovered_nmi;
  266. extern const char *print_tainted(void);
  267. extern void add_taint(unsigned flag);
  268. extern int test_taint(unsigned flag);
  269. extern unsigned long get_taint(void);
  270. extern int root_mountflags;
  271.  
  272. /* Values used for system_state */
  273. extern enum system_states {
  274.     SYSTEM_BOOTING,
  275.     SYSTEM_RUNNING,
  276.     SYSTEM_HALT,
  277.     SYSTEM_POWER_OFF,
  278.     SYSTEM_RESTART,
  279.     SYSTEM_SUSPEND_DISK,
  280. } system_state;
  281.  
  282. #define TAINT_PROPRIETARY_MODULE    0
  283. #define TAINT_FORCED_MODULE        1
  284. #define TAINT_UNSAFE_SMP        2
  285. #define TAINT_FORCED_RMMOD        3
  286. #define TAINT_MACHINE_CHECK        4
  287. #define TAINT_BAD_PAGE            5
  288. #define TAINT_USER            6
  289. #define TAINT_DIE            7
  290. #define TAINT_OVERRIDDEN_ACPI_TABLE    8
  291. #define TAINT_WARN            9
  292. #define TAINT_CRAP            10
  293.  
  294. extern void dump_stack(void) __cold;
  295.  
  296. enum {
  297.     DUMP_PREFIX_NONE,
  298.     DUMP_PREFIX_ADDRESS,
  299.     DUMP_PREFIX_OFFSET
  300. };
  301. extern void hex_dump_to_buffer(const void *buf, size_t len,
  302.                 int rowsize, int groupsize,
  303.                 char *linebuf, size_t linebuflen, bool ascii);
  304. extern void print_hex_dump(const char *level, const char *prefix_str,
  305.                 int prefix_type, int rowsize, int groupsize,
  306.                 const void *buf, size_t len, bool ascii);
  307. extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
  308.             const void *buf, size_t len);
  309.  
  310. extern const char hex_asc[];
  311. #define hex_asc_lo(x)    hex_asc[((x) & 0x0f)]
  312. #define hex_asc_hi(x)    hex_asc[((x) & 0xf0) >> 4]
  313.  
  314. static inline char *pack_hex_byte(char *buf, u8 byte)
  315. {
  316.     *buf++ = hex_asc_hi(byte);
  317.     *buf++ = hex_asc_lo(byte);
  318.     return buf;
  319. }
  320.  
  321. #ifndef pr_fmt
  322. #define pr_fmt(fmt) fmt
  323. #endif
  324.  
  325. #define pr_emerg(fmt, ...) \
  326.         printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
  327. #define pr_alert(fmt, ...) \
  328.         printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
  329. #define pr_crit(fmt, ...) \
  330.         printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
  331. #define pr_err(fmt, ...) \
  332.         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
  333. #define pr_warning(fmt, ...) \
  334.         printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
  335. #define pr_notice(fmt, ...) \
  336.         printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
  337. #define pr_info(fmt, ...) \
  338.         printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
  339.  
  340. /* If you are writing a driver, please use dev_dbg instead */
  341. #if defined(CONFIG_DYNAMIC_PRINTK_DEBUG)
  342. #define pr_debug(fmt, ...) do { \
  343.     dynamic_pr_debug(pr_fmt(fmt), ##__VA_ARGS__); \
  344.     } while (0)
  345. #elif defined(DEBUG)
  346. #define pr_debug(fmt, ...) \
  347.     printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
  348. #else
  349. #define pr_debug(fmt, ...) \
  350.     ({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; })
  351. #endif
  352.  
  353. /*
  354.  *      Display an IP address in readable format.
  355.  */
  356.  
  357. #define NIPQUAD(addr) \
  358.     ((unsigned char *)&addr)[0], \
  359.     ((unsigned char *)&addr)[1], \
  360.     ((unsigned char *)&addr)[2], \
  361.     ((unsigned char *)&addr)[3]
  362. #define NIPQUAD_FMT "%u.%u.%u.%u"
  363.  
  364. #define NIP6(addr) \
  365.     ntohs((addr).s6_addr16[0]), \
  366.     ntohs((addr).s6_addr16[1]), \
  367.     ntohs((addr).s6_addr16[2]), \
  368.     ntohs((addr).s6_addr16[3]), \
  369.     ntohs((addr).s6_addr16[4]), \
  370.     ntohs((addr).s6_addr16[5]), \
  371.     ntohs((addr).s6_addr16[6]), \
  372.     ntohs((addr).s6_addr16[7])
  373. #define NIP6_FMT "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x"
  374. #define NIP6_SEQFMT "%04x%04x%04x%04x%04x%04x%04x%04x"
  375.  
  376. #if defined(__LITTLE_ENDIAN)
  377. #define HIPQUAD(addr) \
  378.     ((unsigned char *)&addr)[3], \
  379.     ((unsigned char *)&addr)[2], \
  380.     ((unsigned char *)&addr)[1], \
  381.     ((unsigned char *)&addr)[0]
  382. #elif defined(__BIG_ENDIAN)
  383. #define HIPQUAD    NIPQUAD
  384. #else
  385. #error "Please fix asm/byteorder.h"
  386. #endif /* __LITTLE_ENDIAN */
  387.  
  388. /*
  389.  * min()/max()/clamp() macros that also do
  390.  * strict type-checking.. See the
  391.  * "unnecessary" pointer comparison.
  392.  */
  393. #define min(x, y) ({                \
  394.     typeof(x) _min1 = (x);            \
  395.     typeof(y) _min2 = (y);            \
  396.     (void) (&_min1 == &_min2);        \
  397.     _min1 < _min2 ? _min1 : _min2; })
  398.  
  399. #define max(x, y) ({                \
  400.     typeof(x) _max1 = (x);            \
  401.     typeof(y) _max2 = (y);            \
  402.     (void) (&_max1 == &_max2);        \
  403.     _max1 > _max2 ? _max1 : _max2; })
  404.  
  405. /**
  406.  * clamp - return a value clamped to a given range with strict typechecking
  407.  * @val: current value
  408.  * @min: minimum allowable value
  409.  * @max: maximum allowable value
  410.  *
  411.  * This macro does strict typechecking of min/max to make sure they are of the
  412.  * same type as val.  See the unnecessary pointer comparisons.
  413.  */
  414. #define clamp(val, min, max) ({            \
  415.     typeof(val) __val = (val);        \
  416.     typeof(min) __min = (min);        \
  417.     typeof(max) __max = (max);        \
  418.     (void) (&__val == &__min);        \
  419.     (void) (&__val == &__max);        \
  420.     __val = __val < __min ? __min: __val;    \
  421.     __val > __max ? __max: __val; })
  422.  
  423. /*
  424.  * ..and if you can't take the strict
  425.  * types, you can specify one yourself.
  426.  *
  427.  * Or not use min/max/clamp at all, of course.
  428.  */
  429. #define min_t(type, x, y) ({            \
  430.     type __min1 = (x);            \
  431.     type __min2 = (y);            \
  432.     __min1 < __min2 ? __min1: __min2; })
  433.  
  434. #define max_t(type, x, y) ({            \
  435.     type __max1 = (x);            \
  436.     type __max2 = (y);            \
  437.     __max1 > __max2 ? __max1: __max2; })
  438.  
  439. /**
  440.  * clamp_t - return a value clamped to a given range using a given type
  441.  * @type: the type of variable to use
  442.  * @val: current value
  443.  * @min: minimum allowable value
  444.  * @max: maximum allowable value
  445.  *
  446.  * This macro does no typechecking and uses temporary variables of type
  447.  * 'type' to make all the comparisons.
  448.  */
  449. #define clamp_t(type, val, min, max) ({        \
  450.     type __val = (val);            \
  451.     type __min = (min);            \
  452.     type __max = (max);            \
  453.     __val = __val < __min ? __min: __val;    \
  454.     __val > __max ? __max: __val; })
  455.  
  456. /**
  457.  * clamp_val - return a value clamped to a given range using val's type
  458.  * @val: current value
  459.  * @min: minimum allowable value
  460.  * @max: maximum allowable value
  461.  *
  462.  * This macro does no typechecking and uses temporary variables of whatever
  463.  * type the input argument 'val' is.  This is useful when val is an unsigned
  464.  * type and min and max are literals that will otherwise be assigned a signed
  465.  * integer type.
  466.  */
  467. #define clamp_val(val, min, max) ({        \
  468.     typeof(val) __val = (val);        \
  469.     typeof(val) __min = (min);        \
  470.     typeof(val) __max = (max);        \
  471.     __val = __val < __min ? __min: __val;    \
  472.     __val > __max ? __max: __val; })
  473.  
  474. /**
  475.  * container_of - cast a member of a structure out to the containing structure
  476.  * @ptr:    the pointer to the member.
  477.  * @type:    the type of the container struct this is embedded in.
  478.  * @member:    the name of the member within the struct.
  479.  *
  480.  */
  481. #define container_of(ptr, type, member) ({            \
  482.     const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
  483.     (type *)( (char *)__mptr - offsetof(type,member) );})
  484.  
  485. struct sysinfo;
  486. extern int do_sysinfo(struct sysinfo *info);
  487.  
  488. #endif /* __KERNEL__ */
  489.  
  490. #define SI_LOAD_SHIFT    16
  491. struct sysinfo {
  492.     long uptime;            /* Seconds since boot */
  493.     unsigned long loads[3];        /* 1, 5, and 15 minute load averages */
  494.     unsigned long totalram;        /* Total usable main memory size */
  495.     unsigned long freeram;        /* Available memory size */
  496.     unsigned long sharedram;    /* Amount of shared memory */
  497.     unsigned long bufferram;    /* Memory used by buffers */
  498.     unsigned long totalswap;    /* Total swap space size */
  499.     unsigned long freeswap;        /* swap space still available */
  500.     unsigned short procs;        /* Number of current processes */
  501.     unsigned short pad;        /* explicit padding for m68k */
  502.     unsigned long totalhigh;    /* Total high memory size */
  503.     unsigned long freehigh;        /* Available high memory size */
  504.     unsigned int mem_unit;        /* Memory unit size in bytes */
  505.     char _f[20-2*sizeof(long)-sizeof(int)];    /* Padding: libc5 uses this.. */
  506. };
  507.  
  508. /* Force a compilation error if condition is true */
  509. #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
  510.  
  511. /* Force a compilation error if condition is true, but also produce a
  512.    result (of value 0 and type size_t), so the expression can be used
  513.    e.g. in a structure initializer (or where-ever else comma expressions
  514.    aren't permitted). */
  515. #define BUILD_BUG_ON_ZERO(e) (sizeof(char[1 - 2 * !!(e)]) - 1)
  516.  
  517. /* Trap pasters of __FUNCTION__ at compile-time */
  518. #define __FUNCTION__ (__func__)
  519.  
  520. /* This helps us to avoid #ifdef CONFIG_NUMA */
  521. #ifdef CONFIG_NUMA
  522. #define NUMA_BUILD 1
  523. #else
  524. #define NUMA_BUILD 0
  525. #endif
  526.  
  527. /* Rebuild everything on CONFIG_FTRACE_MCOUNT_RECORD */
  528. #ifdef CONFIG_FTRACE_MCOUNT_RECORD
  529. # define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD
  530. #endif
  531.  
  532. #endif
  533.